package delphorm.web.validateur;

import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;

import org.springframework.validation.Errors;
import org.springframework.validation.Validator;

import delphorm.entite.questionnaire.FiltreTexte;


public class AjouterFiltreReponseOuverteTexteValidateur implements Validator {

	public boolean supports(Class clazz) {
		return clazz.isAssignableFrom(FiltreTexte.class);
	}

	public void validate(Object formulaire, Errors errors) {
		FiltreTexte filtreTexte = (FiltreTexte)formulaire;
		
		if(filtreTexte.getTailleMaximum() == null)
		{
			errors.rejectValue("maximum","ajouterFiltreReponseOuverteTexte.taillemaximum.obligatoire");
		}
		if(filtreTexte.getTailleMinimum() == null)
		{
			errors.rejectValue("minimum","ajouterFiltreReponseOuverteTexte.tailleminimum.obligatoire");
		}
		if(filtreTexte.getTailleMinimum() != null && filtreTexte.getTailleMaximum() != null)
		{
			if(filtreTexte.getTailleMaximum().doubleValue() < filtreTexte.getTailleMinimum().doubleValue())
			{
				errors.rejectValue("maximum","ajouterFiltreReponseOuverteTexte.taillemaximum.pluspetitqueminimum");
			}
		}
		
		if(filtreTexte.getExpressionReguliere() == null)
		{
			errors.rejectValue("expressionReguliere","ajouterFiltreReponseOuverteTexte.expressionreguliere.obligatoire");
		}
		else
		{	
			try
			{
				Pattern.compile(filtreTexte.getExpressionReguliere());
			}
			catch(PatternSyntaxException exception)
			{
				errors.rejectValue("expressionReguliere","ajouterFiltreReponseOuverteTexte.expressionreguliere.invalide");
			}
		}
				
		if(filtreTexte.getFacultative() == null)
		{
			errors.rejectValue("facultative","ajouterFiltreReponseOuverteTexte.facultative.obligatoire");
		}
		
	}

}
